import CryptoJS from "crypto-js";

/**
 * 生成签名
 * @param appId - 应用ID
 * @param appSecret - 应用密钥
 * @param baseUrl - 请求的基础路径
 * @param params - 请求参数
 * @param timestamp - 时间戳
 * @returns 签名字符串
 */
export function generateSign(
  appId: string,
  appSecret: string,
  baseUrl: string,
  params: Record<string, string>,
  timestamp: number
): string {
  const paramObj = { ...params };
  const paramKeys = Object.keys(paramObj).sort();
  const paramArrs: string[] = [];

  for (const key of paramKeys) {
    let value = paramObj[key];
    if (value?.startsWith("{{")) {
      // 模拟从变量中获取值（根据实际项目环境调整）
      value = getVariableValue(value);
    }
    paramArrs.push(`${key}=${value}`);
  }

  const paramStr = paramArrs.join("&");
  const signStr = appId + appSecret + baseUrl + paramStr + timestamp;
  return CryptoJS.MD5(signStr).toString();
}

/**
 * 模拟从变量中获取值（根据实际需求调整）
 * @param variableName - 变量名称
 * @returns 变量值
 */
function getVariableValue(variableName: string): string {
  // 这里可以根据实际存储方式获取变量值，比如从 localStorage 或 Vuex 中获取
  // 示例：return localStorage.getItem(variableName.replace(/[{}]/g, '')) || '';
  return "";
}
